\chapter{Entorno y plataforma de desarrollo}

\section{Plataforma hardware}

\section{Google Geocoding API}

Google Geocoding API es un servicio web que pertenece al conjunto de servicios web de Google Maps.  Huelga decir que es un servicio proporcionado por Google. Esta API permite realizar operaciones de codificación geográfica y de codificación geográfica inversa. La codificación geográfica consiste en transformar direcciones, tales como ''Calle Tulipán, Móstoles, España'' en coordenadas geográficas, latitud 37.423021 y longitud -122.083739. La codificación geográfica inversa realiza la operación inversa, convierte unas coordenadas geográficas en direcciones. 

Este servicio proporcionado por Google es, como muchos otros servicios de Google, gratuito. También se dispone de una versión \emph{Premier} pero es de pago. Las restricciones más significativas para este proyecto que impone Google en el uso del servicio son: 

\begin{itemize}
  \item Limitación de 2.500 solicitudes de codificación geográfica al día. El proceso de codificación geográfica es un proceso costoso por lo que aplica esta restricción para evitar un uso indebido del servicio.
  \item La información proporcionada por la API sólo puede ser mostrada a través de un mapa de Google.
  \item Es obligatorio mostrar todos los resultados obtenidos de este servicio.
\end{itemize}

Para obtener información más detallada sobre el uso de este servicio, se puede consultar la \emph{licencia de restricciones de los términos del servicio de Maps API\footnote{http://code.google.com/intl/es-ES/apis/maps/terms.html}}. \\

Las consultas a la API se realizan a través de la siguiente URL: 

\lstset{language=HTML}
\lstset{caption={Formato de la URL de consulta de Google Geocoding API}}
\begin{lstlisting}
	http://maps.google.com/maps/api/geocode/output?parameters
\end{lstlisting}

donde \emph{output} indica el formato de salida de la respuesta y puede tomar los valores \textbf{json} y \textbf{xml} para recibir la información en formato \textbf{JSON} y \textbf{XML} respectivamente. \emph{Parameters} es una cadena de parámetros encadenados mediante el caracter \emph{ampersand} (\&). Los parámetros aceptados pueden verse en la tabla \ref{tab:parametros_aceptados_geocoding} . \\

\begin{table}[hbct]
\begin{tabularx}{\textwidth}{| l | l | X |}
\hline
\textbf{Parámetro} & \textbf{Tipo} & \textbf{Descripción}  \\
\hline
address & Obligatorio* & Dirección de la que se quiere obtener las coordenadas geográficas. \\
\hline
latlng & Obligatorio* & Coordenadas, latitud y longitud, de las que se quiere obtener una dirección. \\
\hline
bounds & Opcional & Especifica un área que da preferencia a los resultados contenidos en él. En caso de que haya resultados más relevantes fuera del área, estos resultados no se excluyen. \\
\hline
region & Opcional & Los resultados devueltos están influenciados por la región, normalmente un país. Los códigos de los países siguen el estandar ISO 3166-1. Para españa el código es ''es''. \\
\hline
language & Opcional & Lenguage en el que serán devueltos los resultados. En caso no especificar lenguaje pero sí región, se intentará devolver los resultados en el lenguaje nativo de la región.\\
\hline
sensor & Obligatorio & Indica si la codificación geológica es demanda por un dispositivo con localizador o no.\\
\hline
\end{tabularx}
\caption{Parámetros aceptados en una consulta a Google Geocoding API.}
\label{tab:parametros_aceptados_geocoding}
\end{table}

El asterisco en los atributos \emph{address} y \emph{latlng} indican que solamente uno de los dos puede aparecer en la consulta.

Un ejemplo para averiguar las coordenadas del Campus de Móstoles de la universidad sería:

\lstset{language=HTML}
\lstset{caption={Ejemplo de consulta a Google Geocoding API}}
\begin{lstlisting}
	http://maps.google.com/maps/api/geocode/xml?address=calle+tulipan,+mostoles&sensor=true&region=es
\end{lstlisting}

% Falta por meter los resultados que devuelve la API.

Se puede encontrar más información sobre la Google Geocoding API en la documentación oficial de Google\footnote{http://code.google.com/intl/es-ES/apis/maps/documentation/geocoding/}.



\section{Facebook API}

Facebook es la red social más popular del mundo actualmente. Ha sido creado por Mark Zuckerberg siendo estudiante de Harvard. Una de las características que ha hecho muy popular esta red es la posibilidad de desarrollar aplicaciones y hacer negocio a partir de la red social. Actualmente cuenta con más de 600 millones de usuarios.

Para el desarrollo en el iPhone OS, Facebook pone a disposición de los desarrolladores un kit de herramientas que permite desarrollar de manera rápida y fácil aplicaciones que interactúen con la plataforma Facebook. Se puede descargar gratuitamente de la página de desarrolladores de Facebook\footnote{http://developers.facebook.com/} una copia de de la última versión del SDK mediante un cliente de \emph{Git}. \emph{Git} es el software de control de versiones que utiliza el equipo de desarrolladores de Facebook para el desarrollo del SDK. Para descargarse el código sólo hay que clonar el repositorio:

\lstset{language=bash}
\lstset{caption={Clonar el repositorio Git de Facebook SDK}}
\begin{lstlisting}
	git clone git://github.com/facebook/facebook-ios-sdk.git
\end{lstlisting}

Por último, es necesario registrar una URL que sirve como identificador único de la aplicación. La documentación completa se puede encontrar en la documentación disponible en la página de desarrolladores de Facebook de dispositivos móviles\footnote{http://developers.facebook.com/docs/guides/mobile/}.




\section{Enviador de emails}

Lo úlitmo que he pensado: Ya no va a ser una entidad. Voy a aprovechar la arquitectura predefinida en el Framework \emph{messageUI}. Ahora el subsistema de envío de emails está compuesto por una interfaz y por un controlador.

En principio lo voy a usar directamente, sin envoltorios de interfaces ni nada.

Las clases importantes son \emph{MFMailComposeViewController}\footnote{http://developer.apple.com/library/ios/\#documentation/MessageUI/Reference/MFMailComposeViewController\_class/Reference/Reference.html} y \emph{MFMailComposeViewControllerDelegate}\footnote{http://developer.apple.com/library/ios/\#documentation/MessageUI/Reference/MFMailComposeViewControllerDelegate\_protocol/Reference/Reference.html}.


\section{Eventos de la agenda}

